home *** CD-ROM | disk | FTP | other *** search
/ Power Bytes: Money & Finance / PowerBytes Money and Finance CD-ROM 01 / PowerBytes Money and Finance CD-ROM 01.iso / HyperCard Files / MacMathPascal / card_8218.txt < prev    next >
Encoding:
Text File  |  1988-09-05  |  3.0 KB  |  143 lines

  1. -- card: 8218 from stack: in
  2. -- bmap block id: 0
  3. -- flags: 0000
  4. -- background id: 2607
  5. -- name: TRIG.PAS
  6.  
  7.  
  8. -- part contents for background part 17
  9. ----- text -----
  10. ARCCOS[function]
  11. ARCSIN[function]
  12. ATAN2  [function]
  13.  
  14.  
  15.  
  16. PURPOSE
  17.  
  18. ARCCOS and ARCSIN of x return the inverse of the sin and cos fucntions for x. It is assumed abs(x) Γëñ 1.  ATAN2(y,x) returns the arctan(y/x) in the correct quadrant.  It is assumed x and y are not both zero.
  19.  
  20.  
  21.  
  22.  
  23. TYPE REQUIREMENTS
  24.  
  25. Type
  26. FLOAT = REAL or DOUBLE or EXTENDED;
  27.  
  28.  
  29. CALLING PROCEDURE
  30.  
  31. var
  32. X,Y,ASIN,ACOS:FLOAT;{Input for the functions}
  33.  
  34. Define the input and call the functions.
  35.  
  36. Z:=ATAN2(Y,X);
  37. Z:=ARCCOS(ACOS);
  38. Z:=ARCSIN(ASIN);
  39.  
  40.  
  41. EXAMPLE
  42.  
  43. The example calculates and prints the various functions for x and y ranging form -5 to 5.  The input for ARCCOS is x/sqrt(x*x+y*y).  The input for ARCSIN is y/sqrt(x*x+y*y);
  44.  
  45.  
  46. REFERENCE
  47.  
  48. VAX/VMS Runtime Library Reference Manual, Digital Equipment Corporation, 1982.
  49.  
  50.  
  51. -- part contents for background part 23
  52. ----- text -----
  53. TRIG.PAS
  54.  
  55. -- part contents for background part 22
  56. ----- text -----
  57. TRIG.PAS
  58.  
  59. -- part contents for background part 26
  60. ----- text -----
  61. 21
  62.  
  63. -- part contents for background part 6
  64. ----- text -----
  65. PROGRAM TEST_ACOS;
  66. TYPE
  67. FLOAT = REAL;
  68. FIXXED = INTEGER;
  69. VAR
  70. I, J : FIXXED;
  71. XIN, YIN, Z, AS, AC, AT : FLOAT;
  72. PROCEDURE see;
  73. VAR
  74. R : Rect;
  75. BEGIN
  76. HideAll;
  77. SetRect(R, 0, 35, 550, 330);
  78. SettextRect(R);
  79. Showtext;
  80. END;
  81. FUNCTION ARCCOS (U : FLOAT) : FLOAT;
  82. BEGIN
  83. IF ((0.0 < U) AND (U < 1.0)) THEN
  84. ARCCOS := ARCTAN(SQRT(1.0 - U * U) / U)
  85. ELSE IF ((-1.0 < U) AND (U < 0.0)) THEN
  86. ARCCOS := ARCTAN(SQRT(1.0 - U * U) / U) + 3.141592653589793238462643
  87. ELSE IF U = -1.0 THEN
  88. ARCCOS := 3.141592653589793238462643
  89. ELSE IF U = 1.0 THEN
  90. ARCCOS := 0.0
  91. ELSE IF U = 0.0 THEN
  92. ARCCOS := 3.141592653589793238462643 / 2.0
  93. ELSE
  94. ARCCOS := 0.0 / 0.0;
  95. END;
  96. FUNCTION ARCSIN (U : FLOAT) : FLOAT;
  97. BEGIN
  98. IF ((ABS(U) > 0.0) AND (ABS(U) < 1.0)) THEN
  99. ARCSIN := ARCTAN(U / SQRT(1.0 - U * U))
  100. ELSE IF (U = 0.0) THEN
  101. ARCSIN := 0.0
  102. ELSE IF (U = 1.0) THEN
  103. ARCSIN := +3.141592653589793238462643 / 2.0
  104. ELSE IF (U = -1) THEN
  105. ARCSIN := -3.141592653589793238462643 / 2.0
  106. ELSE
  107. ARCSIN := 0.0 / 0.0;
  108. END;
  109. FUNCTION ATAN2 (Y, X : FLOAT) : FLOAT;
  110. BEGIN
  111. IF ((X = 0.0) AND (Y > 0.0)) THEN
  112. ATAN2 := 3.141592653589793238462643 / 2.0
  113. ELSE IF ((X = 0.0) AND (Y < 0.0)) THEN
  114. ATAN2 := -3.141592653589793238462643 / 2.0
  115. ELSE IF (X > 0.0) THEN
  116. ATAN2 := ARCTAN(Y / X)
  117. ELSE IF ((X < 0.0) AND (Y > 0.0)) THEN
  118. ATAN2 := ARCTAN(Y / X) + 3.141592653589793238462643
  119. ELSE IF ((X < 0.0) AND (Y < 0.0)) THEN
  120. ATAN2 := ARCTAN(Y / X) - 3.141592653589793238462643
  121. ELSE IF ((X < 0.0) AND (Y = 0.0)) THEN
  122. ATAN2 := 3.141592653589793238462643
  123. ELSE
  124. ATAN2 := 0.0 / 0.0;
  125. END;
  126. BEGIN
  127. SEE;
  128. FOR I := -5 TO 5 DO
  129. BEGIN
  130. FOR J := -5 TO 5 DO
  131. IF (NOT ((I = 0) AND (J = 0))) THEN
  132. BEGIN
  133. XIN := I;
  134. YIN := J;
  135. Z := SQRT(XIN * XIN + YIN * YIN);
  136. AS := ARCSIN(YIN / Z);
  137. AC := ARCCOS(XIN / Z);
  138. AT := ATAN2(YIN, XIN);
  139. WRITELN(' (X,Y)  ', XIN : 10 : 5, YIN : 10 : 5);
  140. WRITELN(' ARCSIN ', AS : 20 : 10, ' ARCCOS', AC : 20 : 10, ' ATAN2', AT : 20 : 10);
  141. END;
  142. END;
  143. END.